package com.xxx.sso.base;

import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 基础Service，存放增删改查等单体基本方法
 * @author caiwl
 * @date 2020/5/11 15:21
 */
public abstract class BaseService<T extends BaseEntity> {
    /**
     * 条件+分页查询
     * @param probe
     * @param page
     * @return
     */
    public Page<T> page(T probe, Pageable page) {
        return repository().findAll(Example.of(probe), page);
    }

    /**
     * 单个查询
     * @param id
     * @return
     */
    public T getOne(Long id) {
        return repository().findById(id).orElse(null);
    }

    /**
     * 新增
     * @param entity
     * @return
     */
    public Long add(T entity) {
        repository().save(entity);
        return entity.getId();
    }

    /**
     * 修改
     * @param id
     * @param entity
     */
    public void update(Long id, T entity) {
        entity.setId(id);
        repository().save(entity);
    }

    /**
     * 删除
     * @param id
     */
    public void delete(Long id) {
        repository().deleteById(id);
    }

    /**
     * 获取注入的Repository
     * @return
     */
    protected abstract JpaRepository<T, Long> repository();
}
